<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];
    // list.forEach(function (item, index, array) {
    //     console.log(item, index, array);
    // })


    // JS forEach普通代码实现

    /*  var fn = function (a, b, c) { // 形参 => 接收实际参数
         console.log(a, b, c);
     }
 
     var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];
     for (var i = 0; i < list.length; i++) {
         var item = list[i]; //循环的当前元素
         //  i  循环的当前下标
         //  list 原数组
 
         fn(item, i, list);  // 实际参数 => 函数调用时传入
     }*/

    // 模拟实现filter  
    // 遍历数组 每次循环时 执行传入的函数, 回调函数返回一个条件(true/false) => 把满足条件的元素放到新数组中返回
    // 返回值: 新数组

    function myFilter(list, fn) {
        // var fn = function (a, b, c) { // 形参 => 接收实际参数
        //     console.log(a, b, c);
        // }

        // var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];

        var newArr = [];
        for (var i = 0; i < list.length; i++) {
            var item = list[i]; //循环的当前元素
            //  i  循环的当前下标
            //  list 原数组

            var result = fn(item, i, list);  // 实际参数 => 函数调用时传入 => 返回一个结果 
            if (result) {
                newArr.push(item); //把满足条件的元素放到新数组
            }
        }

        return newArr;
    }


    var arr = [7, 4, 1, 8, 5, 2, 9, 6, 3];
    var result = myFilter(arr, function (item, index, array) {
        console.log(item, index, array);
        return item % 2 == 0;
    });
    console.log(result);






</script>

</html>